package awk.designModel.listener.eventsource;

import awk.designModel.listener.listener.ContextListener;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @description:
 * @author: wanghaifeng
 * @date: 2020/12/28
 * <p>
 * 事件源：机器人
 */
public class Context {

    public Map<String, Object> attributes = new HashMap<>();
    private List<ContextListener> listeners = new ArrayList<>();

    public Context() {
    }


    public Map<String, Object> getAttributes() {
        return attributes;
    }

    public void setAttribute(String key, Object value) {
        attributes.put(key, value);
    }

    /**
     * 这里的监听器注册可以换一种写法,比如基于注解扫描。这里可能会重复注册
     * @param listener
     */
    public void registerListener(ContextListener listener ) {
        this.listeners.add(listener);
    }

    public void starting() {
        /**
         * 监听器的处理,一般监听器只需要有一个类似 onEvent 方法即可,不用专门设计一个starting方法
         */
        for (ContextListener listener : listeners) {
            listener.starting();
        }

        for (ContextListener listener : listeners) {
            listener.onEvent();
        }
    }


}